<?

#############################################################

#															#

#	Arquivo com fun��es para verificar os 					#

#	formul�rios do sistema									#

#															#

#############################################################



require_once(dirname(__FILE__) . "/config.php");

require_once(dirname(__FILE__) . "/print.php");

require_once(dirname(__FILE__) . "/func_converte.php");



function form_valida($campos=array()) {

    global $form_erro;



    if (!$campos) {

        return false;

    }





    foreach($campos as $campo => $info) {

        global $$campo;



        // recupera as vari�veis do formul�rio

        switch (strtoupper($info[0]['via'])) {

            case "POST":

                $$campo = $_POST[$campo];

                break;



            case "GET":

                $$campo = $_GET[$campo];

                break;



            case "FILE":

                $$campo = $_FILES[$campo];

                break;



            default:

                $$campo = $_REQUEST[$campo];

        }



        while (list($key,$var) = each($info)) {

        // passa por todas as verifica��es e compara os valores de cada uma

            foreach($var as $verif => $valor) {



                if (!$info[0]['label']) {

                    $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>N&atilde;o foi passado par&acirc;metro <strong>'label'</strong> para o campo '$campo'.";

                    exit;

                }



                switch (strtolower($verif)) {

                // verifica se o campo est� vazio

                    case "obrig":

                        if (trim($GLOBALS[$campo]) == "" OR (strtoupper($info[$key]['via']) == "FILE" AND $GLOBALS[$campo]['name'] == "")) {

                            $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: n&atilde;o pode ser vazio";

                            continue 4;

                        }

                        break;



                    // verifica campos de confer�ncia

                    case "confere":

                        if ($GLOBALS[$campo] != $$info[$key]['confere']) {

                            $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: n&atilde;o foi digitado um texto id&ecirc;ntico ao anterior";

                            continue 4;

                        }

                        break;



                    // verifica se o valor est� duplicado

                    case "unico":

                        if ($info[$key]['unico'] == true) {

                            if (empty($info[$key]['unico_sql'])) {

                                $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>N&atilde;o foi passado o SQL para verifica&ccedil;&atilde;o de unicidade para o campo '$campo'.";

                                exit;

                            }



                            eval("\$sql = \"" .str_replace("#var#", "$GLOBALS[$campo]", $info[$key]['unico_sql'])."\";");



                            if ($result = db_query($sql, $info[$key]['show_sql'])) {

                                list($count) = @mysql_fetch_row($result);

                            }

                            else {

                                $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>Foi passado um SQL errado para verifica&ccedil;&atilde;o de &uacute;nico para o campo '$campo'.";

                                exit;

                            }

                            if ($count > 0) {

                                if ($info[$key]['unico_msg']) {

                                    eval("\$form_erro[] = \"<strong>\".(\$info[".$key."]['label'] ? \$info[0]['label'] : \$info[0]['label']) . \"</strong>:  ". $info[$key]['unico_msg'] ."\";");

                                }

                                else {

                                    $form_erro[] = "<strong>" . ($info[$key]['label'] ? $info[$key]	['label'] : $info[0]['label']) . "</strong>: \"".$GLOBALS[$campo]."\" j&aacute; est&aacute; cadastrado";

                                }

                                continue 4;

                            }

                        }

                        break;



                    // valida de acordo com os tipos

                    case "formato":

                        if($info[0]['obrig'] OR $GLOBALS[$campo] != "") {

                            require_once(dirname(__FILE__) . "/func_verif_valor.php");

                            switch (strtolower($valor)) {

                            // verifica a formata��o do e-mail

                                case "email":

                                    if (!func_verifica_email($GLOBALS[$campo])) {

                                        $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: n&atilde;o foi digitado um e-mail v&aacute;lido";

                                        continue 5;

                                    }

                                    break;



                                // verifica se o valor � inteiro

                                case "inteiro":

                                    if (!func_verifica_inteiro($GLOBALS[$campo])) {

                                        $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: deve ser digitado um n&uacute;mero inteiro";

                                        continue 5;

                                    }

                                    break;



                                // verifica se o valor � num�rico

                                case "numerico":

                                    if (!is_numeric(func_num_br2bd($GLOBALS[$campo])) OR !ereg("^([0-9]{1,3})((\.?[0-9]{3}){0,5})(\,[0-9]{1,2})?$", $GLOBALS[$campo])) {

                                        $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: deve ser digitado um n&uacute;mero, com at&eacute; 2 casas decimais";

                                        continue 5;

                                    }

                                    break;



                                // verifica se o valor � monet�rio

                                case "monetario":

                                    if (!func_verifica_monetario($GLOBALS[$campo])) {

                                        $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: deve ser digitado um valor monet&aacute;rio";

                                        continue 5;

                                    }

                                    break;



                                // verifica se o valor � CPF

                                case "cpf":

                                    if (!func_verifica_cpf($GLOBALS[$campo])) {

                                        $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: deve ser digitado um CPF v&aacute;lido";

                                        continue 5;

                                    }

                                    break;



                                // verifica se o valor � CNPJ

                                case "cnpj":

                                    if (!func_verifica_cnpj($GLOBALS[$campo])) {

                                        $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: deve ser digitado um CNPJ v&aacute;lido";

                                        continue 5;

                                    }

                                    break;



                                // verifica se o valor � data

                                case "data":

                                    if (!func_verifica_data($GLOBALS[$campo])) {

                                        $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: informe uma data v&aacute;lida, no formato dd/mm/aaaa";

                                        continue 5;

                                    }

                                    break;



                                case "hora":

                                    if (!func_verifica_hora($GLOBALS[$campo])) {

                                        $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: informe uma hora v&aacute;lida, no formato hh:mm";

                                        continue 5;

                                    }

                                    break;



                                // verifica se � uma imagem

                                case "imagem":

                                    if ($GLOBALS[$campo]['name']) {

                                        require_once(dirname(__FILE__) . "/img.php");

                                        if (substr($GLOBALS[$campo]['type'], 0, 6) != "image/") {

                                            $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: n&atilde;o foi informada uma imagem v&aacute;lida";

                                            continue 5;

                                        }

                                    }

                                    break;



                                // verifica se � um mes

                                case "mes":

                                    if ($GLOBALS[$campo]['name']) {

                                        if (!func_verifica_mes($GLOBALS[$campo])) {

                                            $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: informe um m&circ;s v&aacute;lido, no formato mm";

                                            continue 5;

                                        }

                                    }

                                    break;



                                // verifica se � um ano

                                case "ano":

                                    if ($GLOBALS[$campo]['name']) {

                                        if (!func_verifica_ano($GLOBALS[$campo])) {

                                            $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: informe um ano v&aacute;lido, no formato yyyy";

                                            continue 5;

                                        }

                                    }

                                    break;



                            } /* if $info['obrig'] */

                        }

                        break;



                    // verifica se o valor tem registro referenciado no banco

                    case "referenciado":

                        if ($info[$key]['referenciado'] == true) {

                            if (empty($info[$key]['referenciado_sql'])) {

                                $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>N&atilde;o foi passado o SQL para verifica&ccedil;&atilde;o de refer&ecirc;ncias para o campo '$campo'.";

                                exit;

                            }

                            eval("\$sql = \"" .str_replace("#var#", "$GLOBALS[$campo]", $info[$key]['referenciado_sql'])."\";");

                            if ($result = db_query($sql, $info[$key]['show_sql'])) {

                                list($count) = @mysql_fetch_row($result);

                            }

                            else {

                                $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>Foi passado um SQL errado para verifica&ccedil;&atilde;o de refer&ecirc;ncias para o campo '$campo'.";

                                exit;

                            }

                            if ($count > 0) {

                                $form_erro[] = $info[$key]['referenciado_msg'];

                                continue 4;

                            }

                        }

                        break;



                    // verifica se o valor tem registro referenciado no banco

                    case "referenciado2":

                        if ($info[$key]['referenciado2'] == true) {

                            if (empty($info[$key]['referenciado2_sql'])) {

                                $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>N&atilde;o foi passado o SQL para verifica&ccedil;&atilde;o de refer&ecirc;ncias para o campo '$campo'.";

                                exit;

                            }

                            eval("\$sql = \"" .str_replace("#var#", "$GLOBALS[$campo]", $info[$key]['referenciado2_sql'])."\";");

                            if ($result = db_query($sql, $info[$key]['show_sql'])) {

                                list($count) = @mysql_fetch_row($result);

                            }

                            else {

                                $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul�rio.<br>Foi passado um SQL errado para verifica&ccedil;&atilde;o de refer&ecirc;ncias para o campo '$campo'.";

                                exit;

                            }

                            if ($count > 0) {

                                $form_erro[] = $info[$key]['referenciado2_msg'];

                                continue 4;

                            }

                        }

                        break;



                    // verifica tipo da imagem

                    case "img_tipo":

                        if (strtoupper($info[0]['via']) != "FILE" OR $info[0]['formato'] != "imagem") {

                            $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>Para validar uma imagem &eacute; necess&aacute;rio declarar o atributo 'formato' como 'imagem' e o atributo 'via' como 'FILE'.";

                            exit;

                        }

                        if($info[0]['obrig'] AND $GLOBALS[$campo]['name'] != "" AND $info[0]['formato'] == "imagem") {

                            if (!img_confere_tipo($GLOBALS[$campo]['tmp_name'], split(", ", $info[0]['img_tipo']))) {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: somente ser&atilde;o aceitas imagens no formato <strong>". $info[0]['img_tipo'] ."</strong>";

                                continue 4;

                            }

                        }

                        break;



                    // verifica comprimento da imagem

                    case "img_width":

                        if (strtoupper($info[0]['via']) != "FILE" OR $info[0]['formato'] != "imagem") {

                            $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>Para validar uma imagem &eacute; necess&aacute;rio declarar o atributo 'formato' como 'imagem' e o atributo 'via' como 'FILE'.";

                            exit;

                        }

                        if($info[0]['obrig'] AND $GLOBALS[$campo]['name'] != "" AND $info[0]['formato'] == "imagem") {

                            $width_test = split(",", $info[0]['img_width']);

                            $img_result = img_confere_width($GLOBALS[$campo]['tmp_name'], $width_test);

                            $dim = @getimagesize($GLOBALS[$campo]['tmp_name']);

                            if (count($width_test) == 1 AND $img_result == "diferente") {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: a imagem enviada tem " . $dim[0] . " pixels de <strong>largura</strong>. Ela deve ter " . $width_test[0] . " pixels.";

                            }

                            elseif ($img_result == "menor") {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: a imagem enviada tem " . $dim[0] . " pixels de <strong>largura</strong>. Ela deve ter pelo menos " . $width_test[0] . " pixels.";

                            }

                            elseif ($img_result == "maior") {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: a imagem enviada tem " . $dim[0] . " pixels de <strong>largura</strong>. Ela deve ter no m&aacute;ximo " . $width_test[1] . " pixels.";

                            }

                            elseif ($img_result == "ok") {

                            }

                            else {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: n&atilde;o est&aacute; de acordo com o necess&aacute;rio. Em caso de d&iacute;vida, entre em contato com o administrador do sistema";

                            }

                        }

                        break;



                    // verifica altura da imagem

                    case "img_height":

                        if (strtoupper($info[0]['via']) != "FILE" OR $info[0]['formato'] != "imagem") {

                            $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>Para validar uma imagem &eacute; necess&aacute;rio declarar o atributo 'formato' como 'imagem' e o atributo 'via' como 'FILE'.";

                            exit;

                        }

                        if($info[0]['obrig'] AND $GLOBALS[$campo]['name'] != "" AND $info[0]['formato'] == "imagem") {

                            $height_test = split(",", $info[0]['img_height']);

                            $img_result = img_confere_height($GLOBALS[$campo]['tmp_name'], $height_test);

                            $dim = @getimagesize($GLOBALS[$campo]['tmp_name']);

                            if (count($height_test) == 1 AND $img_result == "diferente") {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: a imagem enviada tem " . $dim[1] . " pixels de <strong>altura</strong>. Ela deve ter " . $height_test[0] . " pixels.";

                            }

                            elseif ($img_result == "menor") {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: a imagem enviada tem " . $dim[1] . " pixels de <strong>altura</strong>. Ela deve ter pelo menos " . $height_test[0] . " pixels.";

                            }

                            elseif ($img_result == "maior") {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: a imagem enviada tem " . $dim[1] . " pixels de <strong>altura</strong>. Ela deve ter no m&aacute;ximo " . $height_test[1] . " pixels.";

                            }

                            elseif ($img_result == "ok") {

                            }

                            else {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: n&atilde;o est&aacute; de acordo com o necess&aacute;rio. Em caso de d&iacute;vida, entre em contato com o administrador do sistema";

                            }

                        }

                        break;



                    // verifica peso da imagem

                    case "img_peso":

                        if (strtoupper($info[0]['via']) != "FILE" OR $info[0]['formato'] != "imagem") {

                            $GLOBALS['sis_erro'][] = "Valida&ccedil;&atilde;o de formul&aacute;rio.<br>Para validar uma imagem &eacute; necess&aacute;rio declarar o atributo 'formato' como 'imagem' e o atributo 'via' como 'FILE'.";

                            exit;

                        }

                        if($info[0]['obrig'] AND $GLOBALS[$campo]['name'] != "" AND $info[0]['formato'] == "imagem") {

                            if (!img_confere_peso($GLOBALS[$campo]['tmp_name'], $info[0]['img_peso'])) {

                                $form_erro[] = "<strong>" . $info[0]['label'] . "</strong>: o tamanho m&aacute;ximo de arquivo permitido &eacute; " . $info[0]['img_peso'] . "Kb. O arquivo enviado tem " . round(filesize($GLOBALS[$campo]['tmp_name'])/1024) . "Kb";

                                continue 4;

                            }

                        }

                        break;

                } /* switch (strtolower($verif)) */

            } /* foreach($var as $verif => $valor) */

        } /* while (list(,$var) = each($info)) */

    } /* foreach($campos as $campo => $info) */



    if (!$form_erro) {

        return true;

    }

    else {

        return false;

    }

}



function form_result($ok="Formul&aacute;rio enviado com sucesso.", $exit=false, $botao=false) {

    global $form_erro;



    if (!$form_erro) {

        print_form_result("ok", "", $ok);



        if ($botao) {

            print_form_result_botao($botao);

        }



        if ($exit) {

            exit;

        }

        return true;

    }

    else {

        print_form_result("erro", $form_erro);

        return false;

    }

}



?>